package com.Yukiha.gachamod;

import com.Yukiha.gachamod.command.GachaCommands;
import com.Yukiha.gachamod.gachaMenu.client.gui.pack.PacketHandler;
import com.Yukiha.gachamod.gachaMenu.ModMenuTypes;
import com.Yukiha.gachamod.item.ModItems;
import com.Yukiha.gachamod.network.ModNetworkHandler;
import com.Yukiha.gachamod.util.ModCreativeTab;
import com.Yukiha.gachamod.ysm.YsmAuthFolderSetup;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.fml.IExtensionPoint;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

import static com.Yukiha.gachamod.util.ModelJsonLoader.generateModelJsonByRarity;

@Mod(GachaMod.MODID)
@SuppressWarnings("removal")
public class GachaMod {
    public static final String MODID = "gachamod";

    public GachaMod() {
        // 1. 确保 YSM 授权文件夹存在
        YsmAuthFolderSetup.ensureAuthFoldersExist();

        // 2. 获取 mod 加载事件总线
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();

        // 3. 注册物品
        ModItems.register(modEventBus);

        // 4. 注册菜单类型（必须）
        ModMenuTypes.MENUS.register(modEventBus);

        // 5. 注册创意标签页
        ModCreativeTab.register();

        // 6. 注册网络包定义（发送/接收结构）
        ModNetworkHandler.register();

        // 7. 注册通用 setup 方法（用来注册服务端/客户端通用逻辑）
        modEventBus.addListener(this::commonSetup);

        // 8. 注册命令（属于游戏事件监听器）
        MinecraftForge.EVENT_BUS.addListener(this::onRegisterCommands);

        // 9. Forge 服务端容错兼容设置（不重要但推荐保留）
        ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class,
                () -> new IExtensionPoint.DisplayTest(() -> "ANY", (remote, isServer) -> true));

        // 10. 一次性生成模型 JSON
        generateModelJsonByRarity();
    }


    private void onRegisterCommands(RegisterCommandsEvent event) {
        GachaCommands.register(event.getDispatcher());
    }

    private void commonSetup(final FMLCommonSetupEvent event) {
        event.enqueueWork(PacketHandler::register); // 网络包注册
    }

    }
